package com.zhaotianhao.utils;
import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * 	数字工具类
 */
public class NumUtil {

 // 数字正则表达式
    private static String NUMBER_REG = "^\\d+$";
    // 实数正则表达式（是有理数和无理数的总称）
    private static String REAL_REG =  "^(-)?[0-9]+(\\.[0-9]+)?$";
	
	// 1-1 判断传入字符串是否全为数字(只能判断正整数)
    // "3.2837283"
	public static boolean isNum(String param) {
		if (!StringUtil.hasText(param)) {
			return false;
		}
		return param.matches(NUMBER_REG);
		
	}
	
	// 1-2 判断传入的字符串是否全为实数（正数、负数、有理数、无理数）
	public static boolean isReal(String param) {
		if (!StringUtil.hasText(param)) {
			return false;
		}
		return param.matches(REAL_REG);
	}
	
	// 3、BigDecimal 类型做精准的加法运算
	public static double add(double v1, double v2) {
        // 换成精准类型
        BigDecimal bd1 = new BigDecimal(v1 + "");
        BigDecimal bd2 = new BigDecimal(v2 + "");
        return bd1.add(bd2).doubleValue();
    }
	
	// 4、减法运算
	 public static double sub(double v1, double v2) {
         // 换成精准类型
         BigDecimal bd1 = new BigDecimal(v1 + "");
         BigDecimal bd2 = new BigDecimal(v2 + "");
         return bd1.subtract(bd2).doubleValue();
     }
	 
	 // 5、乘法运算
	 public static double mul(double v1, double v2) {
         // 换成精准类型
         BigDecimal bd1 = new BigDecimal(v1 + "");
         BigDecimal bd2 = new BigDecimal(v2 + "");
         
         return bd1.multiply(bd2).doubleValue();
     }
	 
	 // 6、除法运算
	 public static double div(double v1, double v2, int  scale) {
         // 换成精准类型
         BigDecimal bd1 = new BigDecimal(v1 + "");
         BigDecimal bd2 = new BigDecimal(v2 + "");
         // 常用的舍位方式：四舍五入
         return bd1.divide(bd2, scale,  RoundingMode.HALF_UP).doubleValue();
     }
	 
	 // 7、提供精确的小数位四舍五入处理
	 public static double round(double v, int scale) {
         BigDecimal bd = new BigDecimal(v + "");
         return bd.setScale(scale,  RoundingMode.HALF_UP).doubleValue();
     }


	public static void main(String[] args) {
		double a = 10;
		double b=3;
		double div = div(a, b, 2);
		System.out.println(div);
	}
	 
	
}
